home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagd_f.zip / EGAVGA.SWG / 0175_Tweaked 256x256x256 Chained.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  3KB  |  88 lines

  1. {
  2. Here's something funny to play with. I got it from Tweak by Robert Schmidt of
  3. Ztiff Zox Softwear (just quoting here...), which I FTP'ed. It was written in
  4. C, and rather buggy (as ever with C). Anyway, he called it mode-q, because of
  5. the 3 times 256: cubed. I even documented it a bit. You can alter the
  6. horizontal position by playing with reg $3d4, func $4 for instance. None of
  7. those blew my monitor up, so I guess it won't do any harm on yours. But don't
  8. start complaining if it does: use at your own risk! <btw: as far as I know
  9. it's not possible to harm the VGA-monitor. If you have a EGA or worse, you
  10. better not run this>
  11. }
  12. program tweak256x256chained;
  13. { Original by Robert Schmidt in C, converted to Pas by Bas van Gaalen,
  14.   fido: 2:285/213.8, email: bas.van.gaalen@schotman.nl, Holland, Aug. '94, PD }
  15. const
  16.   vidseg:word=$a000;
  17.  
  18. type
  19.   twrec=record reg:word; func,data:byte; end;
  20.   twarr=array[0..22] of twrec;
  21.  
  22. const
  23.   tweak:twarr=(
  24.     (reg:$03d4; func:$00; data:$5f), { hor. total }
  25.     (reg:$03d4; func:$01; data:$3f), { hor. display enable end }
  26.     (reg:$03d4; func:$02; data:$40), { blank start }
  27.     (reg:$03d4; func:$03; data:$82), { blank end }
  28.     (reg:$03d4; func:$04; data:$4e), { retrace start }
  29.     (reg:$03d4; func:$05; data:$9a), { retrace end }
  30.     (reg:$03d4; func:$06; data:$23), { vertical total }
  31.     (reg:$03d4; func:$07; data:$b2), { overflow register }
  32.     (reg:$03d4; func:$08; data:$00), { preset row scan }
  33.     (reg:$03d4; func:$09; data:$61), { max scan line/char heigth }
  34.     (reg:$03d4; func:$10; data:$0a), { ver. retrace start }
  35.     (reg:$03d4; func:$11; data:$ac), { ver. retrace end }
  36.     (reg:$03d4; func:$12; data:$ff), { ver. display enable end }
  37.     (reg:$03d4; func:$13; data:$20), { offset/logical width }
  38.     (reg:$03d4; func:$14; data:$40), { underlinde location }
  39.     (reg:$03d4; func:$15; data:$07), { ver. blank start }
  40.     (reg:$03d4; func:$16; data:$17), { ver. blank end }
  41.     (reg:$03d4; func:$17; data:$a3), { mode control }
  42.     (reg:$03c4; func:$01; data:$01), { clock mode register }
  43.     (reg:$03c4; func:$04; data:$0e), { memory mode register }
  44.     (reg:$03ce; func:$05; data:$40), { mode register }
  45.     (reg:$03ce; func:$06; data:$05), { misc. register }
  46.     (reg:$03c0; func:$10; data:$41)  { mode control }
  47.   );
  48.  
  49. procedure setpal(col,r,g,b : byte); assembler; asm
  50.   mov dx,03c8h; mov al,col; out dx,al; inc dx; mov al,r; out dx,al
  51.   mov al,g; out dx,al; mov al,b; out dx,al; end;
  52.  
  53. procedure initvga; assembler; asm mov ax,13h; int 10h; end;
  54. procedure inittxt; assembler; asm mov ax,3; int 10h; end;
  55.  
  56. procedure openregs; assembler; asm
  57.   mov dx,03d4h; mov al,11h; out dx,al; inc dx; in al,dx; and al,7fh
  58.   mov ah,al; mov al,11h; dec dx; out dx,ax; end;
  59.  
  60. procedure closeregs; assembler; asm
  61.   mov dx,03d4h; mov al,11h; out dx,al; inc dx; in al,dx; or al,80h
  62.   mov ah,al; mov al,11h; dec dx; out dx,ax; end;
  63.  
  64. procedure setmodeq;
  65. var i:byte;
  66. begin
  67.   initvga;
  68.   openregs;
  69.   for i:=0 to 22 do
  70.     with tweak[i] do begin
  71.       if reg<>$03c0 then port[reg]:=func else port[reg]:=func+32;
  72.       port[reg+1]:=data;
  73.     end;
  74.   closeregs;
  75. end;
  76.  
  77. var x,y:byte;
  78. begin
  79.   setmodeq;
  80.   for x:=0 to 255 do setpal(x,x div 4,x div 5,x div 6);
  81.   for x:=0 to 255 do for y:=0 to 255 do mem[vidseg:y*256+x]:=(x+y) mod 255;
  82.   readln;
  83.   inittxt;
  84. end.
  85.  
  86. { Just imagine the possibilities... No words needed, no muls needed... }
  87.  
  88.